package com.keon.jianbao.util;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import com.keon.jianbao.AppContext;
import com.keon.jianbao.R;
import com.keon.jianbao.api.Api;
import com.keon.jianbao.api.SimpleHandler;
import com.keon.jianbao.base.BaseActivity;
import com.keon.jianbao.bean.PaymentRequest;
import com.keon.jianbao.bean.Result;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.pingplusplus.android.PaymentActivity;

import org.apache.http.Header;
import org.json.JSONException;

import java.io.UnsupportedEncodingException;

/**
 * Created by keon on 15/10/20.
 */
public class PingUtils {
    /**
     * @author sunkai
     *
     * ping++ sdk 示例程序，仅供开发者参考。
     * 【说明文档】https://github.com/PingPlusPlus/pingpp-android/blob/master/docs/ping%2B%2B安卓SDK使用文档.md
     *
     * 【注意】运行该示例，需要用户填写一个YOUR_URL。
     *
     * ping++ sdk 使用流程如下：
     * 1）客户端已经有订单号、订单金额、支付渠道
     * 2）客户端请求服务端获得charge。服务端生成charge的方式参考ping++ 官方文档，地址 https://pingxx.com/guidance/server/import
     * 3）收到服务端的charge，调用ping++ sdk 。
     * 4）onActivityResult 中获得支付结构。
     * 5）如果支付成功。服务端会收到ping++ 异步通知，支付成功依据服务端异步通知为准。
     */


    /**
     * 开发者需要填一个服务端URL 该URL是用来请求支付需要的charge。务必确保，URL能返回json格式的charge对象。
     * 服务端生成charge 的方式可以参考ping++官方文档，地址 https://pingxx.com/guidance/server/import
     * <p/>
     * 【 http://218.244.151.190/demo/charge 】是 ping++ 为了方便开发者体验 sdk 而提供的一个临时 url 。
     * 改 url 仅能调用【模拟支付控件】，开发者需要改为自己服务端的 url 。
     */
    private static String YOUR_URL = "http://218.244.151.190/demo/charge";
    public static final String URL = YOUR_URL;

    public static final int REQUEST_CODE_PAYMENT = 1;

    /**
     * 银联支付渠道
     */
    public static final String CHANNEL_UPMP = "upmp";
    /**
     * 微信支付渠道
     */
    public static final String CHANNEL_WECHAT = "wx";
    /**
     * 支付支付渠道
     */
    public static final String CHANNEL_ALIPAY = "alipay";
    /**
     * 百度支付渠道
     */
    private static final String CHANNEL_BFB = "bfb";
    /**
     * 京东支付渠道
     */
    private static final String CHANNEL_JDPAY_WAP = "jdpay_wap";

    Context context;

    AsyncHttpResponseHandler handler = new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {

            try {
                Result result = new Result(responseBody);
                if (result.getStatus() > 0) {
                    String data = result.getContent();
                    if (null == data) {
                        showMsg("请求出错", "请检查URL", "URL无法获取charge");
                        return;
                    }
                    Log.d("charge", data);
                    Intent intent = new Intent();
                    String packageName = AppContext.getContext().getPackageName();
                    ComponentName componentName = new ComponentName(packageName, packageName + ".wxapi.WXPayEntryActivity");
                    intent.setComponent(componentName);
                    intent.putExtra(PaymentActivity.EXTRA_CHARGE, data);
                    BaseActivity ba = (BaseActivity) context;
                    ba.startActivityForResult(intent, REQUEST_CODE_PAYMENT);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
            ((BaseActivity) context).showToast(R.string.common_error_network);
        }

        @Override
        public void onFinish() {
//            super.onFinish();
            ((BaseActivity) context).hideWaitDialog();
        }
    };

    public PingUtils(Context context) {
        this.context = context;
    }

    public void pay(int appraisal_id, String channel, int type) {
        ((BaseActivity) context).showWaitDialog();
//        new PaymentTask().execute(new PaymentRequest(type, amount));
//        PaymentRequest paymentRequest = new PaymentRequest(type, amount);
//        String json = JsonUtils.toJson2(paymentRequest, PaymentRequest.class);
        //            Api.pay(URL, json, handler);
        Api.get_changer(appraisal_id, channel, type, handler);
    }

    /**
     * onActivityResult 获得支付结果，如果支付成功，服务器会收到ping++ 服务器发送的异步通知。
     * 最终支付成功根据异步通知为准
     */
 /*   protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        wechatButton.setOnClickListener(MainActivity.this);
        alipayButton.setOnClickListener(MainActivity.this);
        upmpButton.setOnClickListener(MainActivity.this);
        bfbButton.setOnClickListener(MainActivity.this);

        //支付页面返回处理
        if (requestCode == REQUEST_CODE_PAYMENT) {
            if (resultCode == Activity.RESULT_OK) {
                String result = data.getExtras().getString("pay_result");
                *//* 处理返回值
                 * "success" - payment succeed
                 * "fail"    - payment failed
                 * "cancel"  - user canceld
                 * "invalid" - payment plugin not installed
                 *//*
                String errorMsg = data.getExtras().getString("error_msg"); // 错误信息
                String extraMsg = data.getExtras().getString("extra_msg"); // 错误信息
                showMsg(result, errorMsg, extraMsg);
            }
        }
    }*/
    public void showMsg(String title, String msg1, String msg2) {
        String str = title;
        if (null != msg1 && msg1.length() != 0) {
            str += "\n" + msg1;
        }
        if (null != msg2 && msg2.length() != 0) {
            str += "\n" + msg2;
        }
        DialogHelp.getMessageDialog(AppContext.getContext(), str).show();
    }

}